 /*******************************************************************************
  * Copyright (c) 2000, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.core.variables;

 import org.eclipse.core.runtime.CoreException;

 /**
  * A dynamic variable is a variable whose value is computed dynamically
  * by a resolver at the time a string substitution is performed. A dynamic
  * variable is contributed by an extension.
  * <p>
  * The following is a definition of a dynamic variable that resolves to the name of the selected resource:
  * <pre>
  * &lt;extension point="org.eclipse.core.variables.dynamicVariables"&gt;
  * &lt;variable
  * name="resource_name"
  * resolver="com.example.ResourceNameResolver"
  * description="The name of the selected resource"
  * supportsArgument="false"&gt;
  * &lt;/variable&gt;
  * &lt;/extension&gt;
  * </pre>
  * </p>
  * <p>
  * Clients are not intended to implement this interface. Instead, clients contributing
  * a dynamic variable provide an implementation of {@link org.eclipse.core.variables.IDynamicVariableResolver}.
  * </p>
  * @since 3.0
  */
 public interface IDynamicVariable extends IStringVariable {

     /**
      * Returns the value of this variable when referenced with the given
      * argument, possibly <code>null</code>.
      *
      * @param argument argument present in variable expression or <code>null</code>
      * if none
      * @return value of this variable when referenced with the given argument, possibly
      * <code>null</code>
      * @throws CoreException if unable to resolve a value for this variable
      */
     public String getValue(String argument) throws CoreException;
     
     /**
      * Returns whether this variable supports an argument, as specified
      * by this variable's extension definition in plug-in XML.
      *
      * @return whether this variable supports an argument
      */
     public boolean supportsArgument();
 }

